﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Data.SqlClient;

namespace VerdePimienta2._0
{
    public partial class OperacionesCliente : Form
    {
        int CodigoVenta = 0;
        string Deuda ="0";

        string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\des_VP.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\VP\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        //string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Documents and Settings\\Chema\\Mis documentos\\Visual Studio 2008\\Projects\\VerdePimienta2.0\\VerdePimienta2.0\\verdepimientadb.mdf;Integrated Security=True;User Instance=True";
        
        public OperacionesCliente()
        {
            InitializeComponent();
        }

        public OperacionesCliente(int codigoVenta, string deuda)
        {
            this.CodigoVenta = codigoVenta;
            this.Deuda = deuda;

            InitializeComponent();
        }

        public void OperacionesCliente_Load(object sender, EventArgs e)
        {
            if (CodigoVenta != 0 && Deuda != "0")
            {
                btnModificarCliente.Text = "Asociar Venta";
                nombreTextBox.ReadOnly = true;
                apellidosTextBox.ReadOnly = true;
                telefonoTextBox.ReadOnly = true;
                movilTextBox.ReadOnly = true;
                provinciaTextBox.ReadOnly = true;
                direccionTextBox.ReadOnly = true;
                poblacionTextBox.ReadOnly = true;
                cPTextBox.ReadOnly = true;
                emailTextBox.ReadOnly = true;
                deudaTextBox.ReadOnly = true;
                btnCerrarListCli.Visible = false;

            }

            SqlConnection c = new SqlConnection(constring);
            c.Open();
                
                SqlDataAdapter da = new SqlDataAdapter("Select * from Clientes where Tipo = 'Cliente'", c);
                
                DataSet ds = new DataSet("Clientes");
                
                da.FillSchema(ds, SchemaType.Source, "Clientes");
                da.Fill(ds, "Clientes");
                
                DataTable dt = ds.Tables["Clientes"];

                dataGridViewClientes.DataSource = ds.Tables["Clientes"].DefaultView;
            
            c.Close();
        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            SqlConnection c =new SqlConnection(constring);
            c.Open();
                SqlDataAdapter daB = new SqlDataAdapter("Select * From Clientes where Tipo='Cliente' and ( (Nombre = @parametro) or (Telefono = @parametro) or (Movil = @parametro) )", c);
                daB.SelectCommand.Parameters.AddWithValue("@parametro", txtNombreClienteBuscar.Text);
                DataSet dsB = new DataSet("Clientes");
                daB.FillSchema(dsB, SchemaType.Source, "Clientes");
                daB.Fill(dsB, "Clientes");
                DataTable tblB;
                tblB = dsB.Tables["Clientes"];

                dataGridViewClientes.DataSource = dsB.Tables["Clientes"].DefaultView;
            c.Close();
        }

        private void dataGridViewClientes_SelectionChanged(object sender, EventArgs e)
        {
            DataGridViewRow row = dataGridViewClientes.CurrentRow;
            if (row != null) 
            {
                lblId.Text = row.Cells[0].Value.ToString();
                nombreTextBox.Text = row.Cells[1].Value.ToString();
                apellidosTextBox.Text = row.Cells[2].Value.ToString();
                telefonoTextBox.Text = row.Cells[3].Value.ToString();
                movilTextBox.Text = row.Cells[4].Value.ToString();
                direccionTextBox.Text = row.Cells[5].Value.ToString();
                poblacionTextBox.Text = row.Cells[6].Value.ToString();
                provinciaTextBox.Text = row.Cells[7].Value.ToString();
                cPTextBox.Text = row.Cells[8].Value.ToString();
                emailTextBox.Text = row.Cells[9].Value.ToString();
                if (row.Cells[12].Value.ToString() == "")
                {
                    deudaTextBox.Text = "0";
                }
                else
                {
                    deudaTextBox.Text = row.Cells[12].Value.ToString();
                }
            }
        }

        private void btnModificarCliente_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(nombreTextBox.Text))
            {
                MessageBox.Show("Debe rellenar el nombre del Cliente.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if ((string.IsNullOrEmpty(telefonoTextBox.Text)) && (string.IsNullOrEmpty(movilTextBox.Text)))
                {
                    MessageBox.Show("Debe al menos un teléfono de contacto del Cliente.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if ((string.IsNullOrEmpty(movilTextBox.Text)) && (!EsNum(telefonoTextBox.Text)))
                    {
                        MessageBox.Show("El teléfono debe ser numérico.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if ((string.IsNullOrEmpty(telefonoTextBox.Text)) && (!EsNum(movilTextBox.Text)))
                        {
                            MessageBox.Show("El móvil debe ser numérico.", "Error Datos Cliente", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            if (!EsNum(deudaTextBox.Text))
                            {
                                MessageBox.Show("El campo deuda debe ser numérico.", "Error Datos Cliente.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            else
                            {
                                string mensaje = "";

                                if ((CodigoVenta == 0) && (Deuda == "0"))
                                    mensaje = "Está seguro de modificar los datos del cliente?";
                                else
                                    mensaje = "Está seguro de asociar la venta al cliente?.";

                                  DialogResult dr = MessageBox.Show(mensaje,
                                              "Nuevo Cliente.",
                                              MessageBoxButtons.OKCancel,
                                              MessageBoxIcon.Question);

                                if (dr == DialogResult.OK)
                                {
                                    if ((CodigoVenta == 0) && (Deuda == "0")) { 
                                    
                                        string strSQL = "UPDATE Clientes SET" +
                                     " Nombre = '" + nombreTextBox.Text +
                                     "' ,Apellidos = '" + apellidosTextBox.Text +
                                     "' ,Telefono = '" + telefonoTextBox.Text +
                                     "' ,Movil = '" + movilTextBox.Text +
                                     "' ,Direccion = '" + direccionTextBox.Text +
                                     "' ,Poblacion = '" + poblacionTextBox.Text +
                                     "' ,Provincia = '" + provinciaTextBox.Text +
                                     "' ,CP = '" + cPTextBox.Text +
                                     "' ,Email = '" + emailTextBox.Text +  
                                     "' ,Deuda = '" + deudaTextBox.Text +
                                     "' WHERE Id = " + lblId.Text;
                                       
                                        ActualizarBaseDatos(strSQL);
                                    }

                                    else if (CodigoVenta != 0 && Deuda != "0")
                                    {
                                        string modificacionVentas = "UPDATE Ventas SET IdCliente = " + lblId.Text + " WHERE Id = " + CodigoVenta;

                                        ActualizarBaseDatos(modificacionVentas);

                                        float incrementoDeuda = (float.Parse(deudaTextBox.Text)) + (float.Parse(Deuda));

                                        string cmdActualizarDeuda = "UPDATE Clientes SET Deuda = " + (incrementoDeuda.ToString().Replace(",",".")) + " WHERE Id = " + lblId.Text ;

                                        ActualizarBaseDatos(cmdActualizarDeuda);

                                    }
                                    else
                                    {
                                        string modificacionVentas = "UPDATE Ventas SET IdCliente = " + lblId.Text + " WHERE Id = " + CodigoVenta;

                                        ActualizarBaseDatos(modificacionVentas);
 
                                    }

                                    resetDatosCliente();
                                    this.Close();
                                }
                                else
                                {

                                }
                            }
                        }
                    }
                }
            }
        }

        private void ActualizarBaseDatos(string comando)
        {
            SqlConnection conexionClientes = new SqlConnection(constring);
            conexionClientes.Open();

            SqlCommand cmSQL = new SqlCommand(comando, conexionClientes);
            
            try
            {
                cmSQL.ExecuteNonQuery();
                conexionClientes.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Error acceso a base de datos.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            conexionClientes.Close();
        }

        public bool EsNum(string val)
        {
            Regex _isNumber = new Regex(@"[0123456789]");
            Match m = _isNumber.Match(val);
            return m.Success;
        }

        public void resetDatosCliente()
        {
            nombreTextBox.Clear();
            apellidosTextBox.Clear();
            telefonoTextBox.Clear();
            movilTextBox.Clear();
            direccionTextBox.Clear();
            poblacionTextBox.Clear();
            provinciaTextBox.Clear();
            cPTextBox.Clear();
            emailTextBox.Clear();        }

        private void btnCerrarListCli_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
